package main

import (
	"fmt"
)

type Student struct{
	age int
	high int
	name string
}


/*
1 %v    值的默认格式表示。只打印值
2 %+v   打印 字段类型 和 值
3 %#v    打印 结构体名称，字段类型和值
4 %T    打印数据类型
5 %%    百分号
6
*/
/*
func splitLine(s string){
	fmt.Printf("%s\n", s)
}
*/
//打印字体颜色
const (
	TextBlack = iota + 30
	TextRed
	TextGreen
	TextYellow
	TextBlue
	TextMagenta
	TextCyan
	TextWhite
)
func debug(s string){
	fmt.Printf("\x1b[0;%dm%s\x1b[0m\n", TextBlue, s)
}
/*
func printTest(comment string, f func(format string, a ...interface{})(int, error), format string, a ...interface{}){
	fmt.Printf("\x1b[0;%dm%s\x1b[0m\n", TextBlue, comment)
	f(format, a...)
}
*/
func main() {
	var b Student = Student{age: 10, high: 178, name: "NewMan"}

	debug("0, fmt.Print")
	//0, Print, 只打印，","隔开，可打印很多参数，字符串之间没有空格，没有换行；以下结果为abcd
	debug("0.1, Print, 只打印，\",\"隔开，可打印很多参数，字符串之间没有空格，行尾没有换行；以下结果为abcd")
	fmt.Print("a","b")
	fmt.Print("c","b")

	debug("\n0.2, Print, 打印a,b的ascii码，数字之间有空格 97 98")
	fmt.Print('a','b',"\n") //打印a,b的ascii码，并且有空格 97 98.

	debug("1, fmt.Printf")

	debug("1.1 %v    值的默认格式表示。只打印值")
	fmt.Printf("value v:%v\n", b)		//value v:{10 178 NewMan}

	debug("1.2 %+v   打印 字段类型 和 值")
	fmt.Printf("value +v:%+v\n", b)		//value +v:{age:10 high:178 name:NewMan}

	debug("1.3 %#v    打印 结构体名称，字段类型和值")
	fmt.Printf("value #v:%#v\n", b)		//value #v:main.Student{age:10, high:178, name:"NewMan"}

	debug("1.4 %T    打印数据类型")
	fmt.Printf("type T:%T\n", b)			//输出结果 type T:main.Student
	fmt.Printf("type T:%T\n",1)			//输出结果 type T:int

	debug("1.5 %%    百分号")	//输出结果%
	fmt.Printf("%%\n")

	debug("1.6 %t    打印布尔值")
	fmt.Printf("%t\n", true)  			//输出结果true
	fmt.Printf("%t\n", 0)  				//%!t(int=0)
	//二 Println
	debug("2, fmt.Println")

	debug("2.1, Prinln, 打印值，两个参数间自动加空格，行尾加换行")
	fmt.Println("\n", 12, 13) 				//输出结果  \n 12 13//12前面有空格

	debug("2.2, Println 打印结构体值")
	fmt.Println(b) 								//输出结果：{10 178 NewMan}
}
